package fr.afcepf.al23.qualite.data.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import fr.afcepf.al23.qualite.data.IDaoUtilisateur;
import fr.afcepf.al23.qualite.data.QualiteDataSource;
import fr.afcepf.al23.qualite.entity.Utilisateur;

/**
 * @author vsegouin
 *
 */
public class DaoUtilisateur implements IDaoUtilisateur {
    /**
     * DataSource for database connexion.
     */
    private DataSource ds = new QualiteDataSource();
    /**
     * Query for User connection.
     */
    private final String reqConnection = "SELECT * FROM Utilisateur WHERE mail = ? AND mdp = ?";

    /**
     * indice de la variable mot de passe dans la requete connection.
     */
    private int indiceParamMdpReqConnect = 1;
    /**
     * indice de la variable email dans la requete connection.
     */
    private int indeceParamMailReqConnect = 2;

    @Override
    public Utilisateur seConnecter(String paramMail, String paramMdp) {
        Utilisateur user = null;
        Connection cnx = null;
        try {
            cnx = ds.getConnection();
            PreparedStatement pstmt = cnx.prepareStatement(reqConnection);
            pstmt.setString(indeceParamMailReqConnect, paramMail);
            pstmt.setString(indiceParamMdpReqConnect, paramMdp);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = rsToUtilisateur(rs);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return user;
    }

    /**
     * Transforme un resultSet en utilisateur.
     * @param paramRs
     * @return Utilisateur
     */
    private Utilisateur rsToUtilisateur(ResultSet paramRs) throws SQLException{
        Utilisateur user;
        user = new Utilisateur(
                paramRs.getInt(colonneId),
                paramRs.getString(colonneNom),
                paramRs.getString(colonneMail),
                paramRs.getString(colonneMdp),
                paramRs.getString(colonneAdresse)
                );
        return user;
    }
    @Override
    public Utilisateur enregister(Utilisateur memUser) {
        return null;
    }

    @Override
    public boolean verifMail(String memMail) {
        // TODO Auto-generated method stub
        return false;
    }

    /**
     * nom de la colonne 'id' dans la table utilisateur.
     */
    private final String colonneId = "id";

    /**
     * nom de la colonne 'nom' dans la table utilisateur.
     */
    private final String colonneNom = "nom";
    /**
     * nom de la colonne 'mail' dans la table utilisateur.
     */
    private final String colonneMail = "mail";
    /**
     * nom de la colonne 'mdp' dans la table utilisateur.
     */
    private final String colonneMdp = "mdp";
    /**
     * nom de la colonne 'adresse' dans la table utilisateur.
     */
    private final String colonneAdresse = "adresse";
}
